<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>
    // // 13.map()
    // var arr = [10, 20, 30, 40, 50];
    // var newArr = arr.map(function(item, index, arr) {
    //   // 遍历要做的事情，映射关系
    //   return item * 10;
    // });
    // console.log(newArr);
    // console.log(arr);

    // // 14.filter()    过滤
    // var arr = [10, 20, 30, 40, 50];
    // var newArr = arr.filter(function(item, index, arr) {
    //   // 过滤的条件
    //   return item > 20;
    // });
    // console.log(newArr);
    // console.log(arr);

    // // 15.some()   某些
    // // 【注】在数组中查找是否有符合条件的元素，只要有一个就会返回true，全部没有就返回false
    // // 短路操作：只要找到符合条件的元素，后面的循环就停止了
    // var arr = [10, 20, 30, 40, 50];
    // var res = arr.some(function(item, index, arr) {
    //   // 过滤的条件
    //   return item > 20;
    // });
    // console.log(res);
    // console.log(arr);

    // // 16.every()   每一个
    // // 【注】在数组中查找每一个元素是否符合条件，全部符合才会返回true，只要有一个不符合就返回false
    // // 短路操作：只要找到不符合条件的元素，后面的循环就停止了。
    // var arr = [10, 20, 30, 40, 50];
    // var res = arr.every(function(item, index, arr) {
    //   // 过滤的条件
    //   return item < 50;
    // });
    // console.log(res);
    // console.log(arr);

    // // 17.reduce()   归并
    // var arr = [10, 20, 30, 40, 50];
    // var res = arr.reduce(function(prev, next, index, arr) {
    //   // prev：第一次是下标为0的元素
    //   //       第二次开始为上一次遍历后return的值
    //   // next：从下标1开始，当前遍历到的元素
    //   // arr：数组本身
    //   console.log(prev, next);
    //   return prev + next;
    // });
    // console.log(res);

    // 计算数组中每个元素出现的次数
    let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice', 'Alice'];
    let nameNum = names.reduce((pre, cur) => {
      cur in pre ? pre[cur]++ : pre[cur] = 1
      return pre
    }, {})
    console.log(nameNum); //{Alice: 3, Bob: 1, Tiff: 1, Bruce: 1}

    // 数组去重
    let arr = [1, 2, 3, 4, 4, 1]
    let newArr = arr.reduce((pre, cur) => {
      if (!pre.includes(cur)) {
        return pre.concat(cur)
      } else {
        return pre
      }
    }, [])
    console.log(newArr);// [1, 2, 3, 4]

    // 将二维数组转化为一维
    let arr = [[0, 1], [2, 3], [4, 5]]
    let newArr = arr.reduce((pre, cur) => {
      return pre.concat(cur)
    }, [])
    console.log(newArr); // [0, 1, 2, 3, 4, 5]

    // 将多维数组转化为一维
    let arr = [[0, 1], [2, 3], [4, [5, 6, 7]]]
    const newArr = function (arr) {
      return arr.reduce((pre, cur) => pre.concat(Array.isArray(cur) ? newArr(cur) : cur), [])
    }
    console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]


  </script>
</body>

</html>